home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 May / macformat-024.iso / Shareware City / Developers / appe Windows 1.51 / TextServices.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-09  |  16.3 KB  |  485 lines  |  [TEXT/R*ch]

  1. /*
  2.     File:        TextServices.h
  3.  
  4.     Copyright:    © 1983-1993 by Apple Computer, Inc.
  5.                 All rights reserved.
  6.  
  7.     Version:    System 7.1 for ETO #11
  8.     Created:    Tuesday, March 30, 1993 18:00
  9.     
  10.     Modified:    Added Gestalt call for 'tsmv' as in Technote
  11.                 Fixed Prototype for Init and Close
  12.                 - fprefect@engin.umich.edu, 4/29/94
  13.  
  14. */
  15.  
  16. #ifndef __TEXTSERVICES__
  17. #define __TEXTSERVICES__
  18.  
  19. #ifndef __TYPES__
  20. #include    <Types.h>
  21. #endif
  22.  
  23. #ifndef __EVENTS__
  24. #include    <Events.h>
  25. #endif
  26.  
  27. #ifndef __MENUS__
  28. #include    <Menus.h>
  29. #endif
  30.  
  31. #ifndef __APPLEEVENTS__
  32. #include    <AppleEvents.h>
  33. #endif
  34.  
  35. #ifndef __ERRORS__
  36. #include    <Errors.h>
  37. #endif
  38.  
  39.  
  40. #ifndef __COMPONENTS__
  41. #include    <Components.h>
  42. #endif
  43.  
  44.  
  45. #define        gestaltTSMgrVersion            'tsmv'
  46.  
  47. #define        kTSMVersion                    1                /* Version of the Text Services Manager */
  48. #define        kTextService                'tsvc'        /* component type for the component description */
  49. #define        kInputMethodService        'inpm'        /* component subtype for the component description */
  50.  
  51. #define        bTakeActiveEvent            15                /* bit set if the component takes active event */
  52. #define        bScriptMask                    0x00007F00    /* bit 8 - 14 */
  53. #define        bLanguageMask                0x000000FF    /* bit 0 - 7  */
  54. #define        bScriptLanguageMask        bScriptMask+bLanguageMask    /* bit 0 - 14  */
  55. /*    •• ************************************** ••  */
  56.  
  57.  
  58. /* Hilite styles ... */
  59. typedef enum {
  60.     kCursorPosition                =    1,                    /* specify cursor position */
  61.     kRawText                            =    2,                    /* specify range of raw text */
  62.     kSelectedRawText                =    3,                    /* specify range of selected raw text */
  63.     kConvertedText                    =    4,                    /* specify range of converted text */
  64.     kSelectedConvertedText        =    5                    /* specify range of selected converted text */
  65. } HiliteStyleType;
  66.  
  67. /*    •• ************************************** ••  */
  68.  
  69.  
  70. /* Apple Event constants ... */
  71.  
  72. /* Event class ... */
  73.  
  74. #define        kTextServiceClass            kTextService
  75.  
  76. /* event ID ... */
  77.  
  78. #define        kUpdateActiveInputArea    'updt'        /* update the active Inline area */    
  79. #define        kPos2Offset                    'p2st'        /* converting global coordinates to char position */
  80. #define        kOffset2Pos                    'st2p'        /* converting char position to global coordinates */
  81. #define        kShowHideInputWindow        'shiw'        /* show or hide the input window */
  82.  
  83. /* Event keywords ... */
  84.  
  85. #define        keyAETSMDocumentRefcon    'refc'        /* TSM document refcon, typeLongInteger        <#45> */
  86.  
  87.  
  88. #define        keyAEServerInstance        'srvi'        /* component instance */
  89. #define        keyAETheData                'kdat'        /* typeText */
  90. #define        keyAEScriptTag                'sclg'        /* script tag */
  91. #define        keyAEFixLength                'fixl'        /* fix len ?? */
  92. #define        keyAEHiliteRange            'hrng'        /* hilite range array */
  93. #define        keyAEUpdateRange            'udng'        /* update range array */
  94. #define        keyAEClauseOffsets        'clau'        /* Clause Offsets array */
  95.  
  96. #define        keyAECurrentPoint            'cpos'        /* current point */
  97. #define        keyAEDragging                'bool'        /* dragging falg */
  98. #define        keyAEOffset                    'ofst'        /* offset */
  99. #define        keyAERegionClass            'rgnc'        /* region class */
  100. #define        keyAEPoint                    'gpos'        /* current point */
  101. #define        keyAEBufferSize            'buff'        /* buffer size to get the text */
  102. #define        keyAERequestedType        'rtyp'        /* requested text type */
  103. #define        keyAEMoveView                'mvvw'        /* move view flag */
  104. #define        keyAELength                    'leng'        /* length */
  105. #define        keyAENextBody                'nxbd'        /* next or previous body */
  106.  
  107.  
  108. /* optional keywords for Offset2Pos                    -- 28Mar92 <#38> */
  109. #define        keyAETextFont                'ktxf'
  110. #define        keyAETextPointSize        'ktps'
  111. #define        keyAETextLineHeight        'ktlh'
  112. #define        keyAETextLineAscent        'ktas'
  113. #define        keyAEAngle                    'kang'
  114.  
  115.  
  116. /* optional keywords for Pos2Offset                    -- 20May92 <#44> */
  117. #define        keyAELeftSide                'klef'        /* type Boolean */
  118.  
  119. /* optional keywords for kShowHideInputWindow    -- <#48> */
  120. #define        keyAEShowHideInputWindow 'shiw'        /* type Boolean */
  121.  
  122. /* for PinRange  */
  123. #define        keyAEPinRange                'pnrg'        /* <#49> */
  124.  
  125. /* Desc type ... */
  126.  
  127. #define        typeComponentInstance    'cmpi'        /* server instance */
  128. #define        typeTextRangeArray        'tray'        /* text range array */
  129. #define        typeOffsetArray            'ofay'        /* offset array */
  130. #define        typeIntlWritingCode        'intl'        /* script code */
  131. #define        typeQDPoint                    'QDpt'        /* QuickDraw Point */
  132. #define        typeAEText                    'tTXT'        /* Apple Event text */
  133. #define        typeText                        'TEXT'        /* Plain text */
  134.  
  135. #define        typeTextRange                'txrn'        /* <#49> */
  136.  
  137.  
  138.  
  139. /* error codes */
  140.  
  141. #define    tsmComponentNoErr                0                // component result = no error
  142.  
  143.  
  144. #define    tsmUnsupScriptLanguageErr    -2500            //
  145. #define    tsmInputMethodNotFoundErr    -2501            //
  146. #define    tsmNotAnAppErr                    -2502            // not an application error
  147. #define    tsmAlreadyRegisteredErr        -2503            // want to register again error
  148. #define    tsmNeverRegisteredErr        -2504            // app never registered error (not TSM aware)
  149. #define    tsmInvalidDocIDErr            -2505            // invalid TSM documentation id
  150. #define    tsmTSMDocBusyErr                -2506            // document is still active
  151. #define    tsmDocNotActiveErr            -2507            // document is NOT active
  152. #define    tsmNoOpenTSErr                    -2508            // no open text service
  153. #define    tsmCantOpenComponentErr        -2509            // can't open the component
  154. #define    tsmTextServiceNotFoundErr    -2510            // no text service found
  155. #define    tsmDocumentOpenErr            -2511            // there are open documents
  156. #define    tsmUseInputWindowErr            -2512            // not TSM aware because we are using input window
  157. #define    tsmTSHasNoMenuErr                -2513            // the text service has no menu
  158. #define    tsmTSNotOpenErr                -2514            // text service is not open
  159. #define    tsmComponentAlreadyOpenErr    -2515            // text service already opened for the document
  160.  
  161. #define    tsmInputMethodIsOldErr        -2516            // returned by GetDefaultInputMethod
  162. #define    tsmScriptHasNoIMErr            -2517            // script has no imput method or is using old IM.
  163. #define    tsmUnsupportedTypeErr        -2518            // unSupported interface type error
  164. #define    tsmUnknownErr                    -2519            // any other errors
  165.  
  166.  
  167.  
  168.  
  169. /* Desc type constants */
  170.  
  171. typedef enum {
  172.     kTSMOutsideOfBody                    = 1,
  173.     kTSMInsideOfBody                    = 2,
  174.     kTSMInsideOfActiveInputArea    = 3
  175. } AERegionClassType;
  176.  
  177. typedef enum {
  178.     kNextBody                        = 1,
  179.     kPreviousBody                    = 2
  180. } AENextBodyType;
  181.  
  182.  
  183. /* Apple Event error definitions */
  184.  
  185. typedef enum {
  186.     errOffsetInvalid                = -1800,
  187.     errOffsetIsOutsideOfView    = -1801,
  188.     errTopOfDocument                = -1810,
  189.     errTopOfBody                    = -1811,
  190.     errEndOfDocument                = -1812,
  191.     errEndOfBody                    = -1813
  192. } AppleEventErrorType;
  193.  
  194. /*    •• ************************************** ••  */
  195.  
  196.  
  197. struct TextRange {                    /* typeTextRange         'txrn' */
  198.     long    fStart;
  199.     long    fEnd;
  200.     short    fHiliteStyle;
  201. };
  202. typedef struct TextRange TextRange;
  203. typedef TextRange *TextRangePtr;
  204. typedef TextRangePtr *TextRangeHandle;
  205.  
  206.  
  207. struct TextRangeArray {                /* typeTextRangeArray    'txra' */
  208.     short        fNumOfRanges;            /* specify the size of the fRange array */
  209.     TextRange    fRange[1];            /* when fNumOfRanges > 1, the size of this array has to be calculated */
  210. };
  211. typedef struct TextRangeArray TextRangeArray;
  212. typedef TextRangeArray *TextRangeArrayPtr;
  213. typedef TextRangeArrayPtr *TextRangeArrayHandle;
  214.  
  215.  
  216. struct OffsetArray {                    /* typeOffsetArray        'offa' */
  217.     short    fNumOfOffsets;                /* specify the size of the fOffset array */
  218.     long    fOffset[1];                    /* when fNumOfOffsets > 1, the size of this array has to be calculated */
  219. };
  220. typedef struct OffsetArray OffsetArray;
  221. typedef OffsetArray *OffsetArrayPtr;
  222. typedef OffsetArrayPtr *OffsetArrayHandle;
  223.  
  224. /*    •• ************************************** ••  */
  225.  
  226.  
  227. /* extract Script/Language code from Component flag ... */
  228. #define        mGetScriptCode(cdRec)        ((ScriptCode)    ((cdRec.componentFlags & bScriptMask) >> 8))
  229. #define        mGetLanguageCode(cdRec)        ((LangCode)        cdRec.componentFlags & bLanguageMask)
  230.  
  231.  
  232. typedef        void    *TSMDocumentID;
  233. /*    •• ************************************** ••  */
  234.  
  235.  
  236. /*
  237.  *    Text Service Info List
  238.  */
  239. struct TextServiceInfo {
  240.  Component            fComponent;
  241.  Str255                fItemName;
  242. };
  243.  
  244. typedef struct TextServiceInfo TextServiceInfo;
  245. typedef TextServiceInfo *TextServiceInfoPtr;
  246.  
  247.  
  248. struct TextServiceList {
  249.  short                    fTextServiceCount;                /* number of entries in the 'fServices' array */
  250.  TextServiceInfo        fServices[1];                        /* Note: array of 'TextServiceInfo' records follows */
  251. };
  252.  
  253. typedef struct TextServiceList TextServiceList;
  254. typedef TextServiceList *TextServiceListPtr; 
  255. typedef TextServiceListPtr *TextServiceListHandle; 
  256.  
  257.  
  258. struct ScriptLanguageRecord {
  259.  ScriptCode        fScript;
  260.  LangCode        fLanguage;
  261. };
  262.  
  263. typedef struct ScriptLanguageRecord ScriptLanguageRecord;
  264.  
  265.  
  266. struct ScriptLanguageSupport {
  267.  short                        fScriptLanguageCount;        /* number of entries in the 'fScriptLanguageArray' array */
  268.  ScriptLanguageRecord    fScriptLanguageArray[1];    /* Note: array of 'ScriptLanguageRecord' records follows */
  269. };
  270.  
  271. typedef struct ScriptLanguageSupport ScriptLanguageSupport;
  272. typedef ScriptLanguageSupport *ScriptLanguageSupportPtr; 
  273. typedef ScriptLanguageSupportPtr *ScriptLanguageSupportHandle; 
  274.  
  275. /*    •• ************************************** ••  */
  276.  
  277.  
  278.  
  279.  
  280. #define    TSMTrapNum        0xAA54
  281.  
  282. /* ••    Text Services Manager function selectors ... */
  283.  
  284. /* ••    High level routines ... */
  285. #define    kNewTSMDocument                0        // create new TSM aware document
  286. #define    kDeleteTSMDocument            1        // delete TSM aware document
  287. #define    kActivateTSMDocument            2        // activate TSM aware document
  288. #define    kDeactivateTSMDocument        3        // deactivate TSM aware document
  289. #define    kTSMEvent                        4        // pass all events to TSM
  290. #define    kTSMMenuSelect                    5        // pass menu selection to TSM
  291. #define    kSetTSMCursor                    6        // set the cursor
  292. #define    kFixTSMDocument                7        // terminate text services
  293. #define    kGetServiceList                8        // get all text service components
  294. #define    kOpenTextService                9        // open  the text service
  295. #define    kCloseTextService                10        // close the text service
  296. #define    kSendAEFromTSMComponent        11        // send Apple Event to client
  297.  
  298.  
  299. /* ••    Utilities ... */
  300.  
  301. #define    kSetDefaultInputMethod        12        // 
  302. #define    kGetDefaultInputMethod        13        // 0x0D
  303. #define    kSetTextServiceLanguage        14        // Called by Script Mgr
  304. #define    kGetTextServiceLanguage        15        // 
  305. #define    kUseInputWindow                16        // 
  306. #define    kNewServiceWindow                17        // 
  307. #define    kCloseServiceWindow            18        // 
  308. #define    kGetFrontServiceWindow        19        // 
  309.  
  310.  
  311. #define    kInitTSMAwareApplication    20        // claim TSM aware application
  312. #define    kCloseTSMAwareApplication    21        // application deregisters itself as TSM aware
  313.  
  314. #define    kFindServiceWindow            23
  315.  
  316.  
  317. /*    •• ************************************** ••  */
  318.  
  319.  
  320.  
  321.  
  322. /* High level TSM routines .. */
  323.  
  324. pascal OSErr NewTSMDocument(short numOfInterface,        OSType supportedInterfaceTypes[],
  325.                                      TSMDocumentID *idocID,        long     refcon)
  326. = { 0x303C,kNewTSMDocument, TSMTrapNum };                    /* MOVE.W    #selector,D0        */
  327.  
  328. pascal OSErr DeleteTSMDocument(TSMDocumentID idocID)
  329. = { 0x303C, kDeleteTSMDocument, TSMTrapNum };
  330.  
  331. pascal OSErr ActivateTSMDocument(TSMDocumentID idocID)
  332. = { 0x303C, kActivateTSMDocument, TSMTrapNum };
  333.  
  334. pascal OSErr DeactivateTSMDocument(TSMDocumentID idocID)
  335. = { 0x303C, kDeactivateTSMDocument, TSMTrapNum };
  336.  
  337. pascal Boolean TSMEvent(EventRecord *event)                                     // pass all events to TSM (removed TSMDocumentID #35)
  338. = { 0x303C, kTSMEvent, TSMTrapNum };
  339.  
  340. pascal Boolean TSMMenuSelect(long menuResult)                                 // pass menu selection to TSM (removed TSMDocumentID #35)
  341. = { 0x303C, kTSMMenuSelect, TSMTrapNum };
  342.  
  343. pascal Boolean SetTSMCursor(Point mousePos)                                     // set the cursor (removed TSMDocumentID #35)
  344. = { 0x303C, kSetTSMCursor, TSMTrapNum };
  345.  
  346. pascal OSErr FixTSMDocument(TSMDocumentID idocID)                             // terminate text services
  347. = { 0x303C, kFixTSMDocument, TSMTrapNum };
  348.  
  349. pascal OSErr GetServiceList(short            numOfInterface,
  350.                             OSType                        supportedInterfaceTypes[],
  351.                             TextServiceListHandle    *serviceInfo,
  352.                             long                            *seedValue)                     // get all text services
  353. = { 0x303C, kGetServiceList, TSMTrapNum };
  354.  
  355. pascal OSErr OpenTextService(TSMDocumentID idocID, Component aComponent, ComponentInstance *aComponentInstance) 
  356. = { 0x303C, kOpenTextService, TSMTrapNum };                                    // open the text service (return instance)
  357.  
  358.  
  359. pascal OSErr CloseTextService(TSMDocumentID idocID, ComponentInstance aComponentInstance)
  360. = { 0x303C, kCloseTextService, TSMTrapNum };                                     // close the text service (return instance)
  361.  
  362.  
  363.  
  364. /* Sending callback AppleEvents ... */
  365. pascal OSErr SendAEFromTSMComponent(AppleEvent        *theAppleEvent,    // should be a pointer
  366.                             AppleEvent                *reply, 
  367.                             AESendMode                sendMode,
  368.                             AESendPriority            sendPriority,
  369.                             long                        timeOutInTicks,
  370.                             IdleProcPtr                idleProc,
  371.                             EventFilterProcPtr    filterProc )
  372. = { 0x303C, kSendAEFromTSMComponent, TSMTrapNum };
  373.  
  374. pascal OSErr InitTSMAwareApplication(void)                                         // app registers itself as TSM aware
  375. = { 0x303C, kInitTSMAwareApplication, TSMTrapNum };
  376.  
  377.  
  378. pascal OSErr CloseTSMAwareApplication(void)                                         // app deregisters itself when quit
  379. = { 0x303C, kCloseTSMAwareApplication, TSMTrapNum };
  380.  
  381.  
  382.  
  383.  
  384. /* ••  Utilities ... */
  385. pascal OSErr SetDefaultInputMethod ( Component  ts, ScriptLanguageRecord *slRecordPtr )
  386. = { 0x303C, kSetDefaultInputMethod, TSMTrapNum };
  387.  
  388. pascal OSErr GetDefaultInputMethod ( Component *ts, ScriptLanguageRecord *slRecordPtr )
  389. = { 0x303C, kGetDefaultInputMethod, TSMTrapNum };
  390.  
  391. pascal OSErr SetTextServiceLanguage( ScriptLanguageRecord *slRecordPtr )
  392. = { 0x303C, kSetTextServiceLanguage, TSMTrapNum };
  393.  
  394. pascal OSErr GetTextServiceLanguage( ScriptLanguageRecord *slRecordPtr )
  395. = { 0x303C, kGetTextServiceLanguage, TSMTrapNum };
  396.  
  397. pascal OSErr UseInputWindow( TSMDocumentID idocID, Boolean useWindow )
  398. = { 0x303C, kUseInputWindow, TSMTrapNum };
  399.  
  400. pascal OSErr NewServiceWindow(void            *wStorage,
  401.                                 const Rect            *boundsRect,
  402.                                 ConstStr255Param    title,
  403.                                 Boolean                visible,
  404.                                 short                    theProc,
  405.                                 WindowPtr            behind,
  406.                                 Boolean                goAwayFlag,
  407.                                 ComponentInstance    ts,
  408.                                 WindowPtr            *window )
  409. = { 0x303C, kNewServiceWindow, TSMTrapNum };
  410.  
  411. pascal OSErr CloseServiceWindow(WindowPtr window )
  412. = { 0x303C, kCloseServiceWindow, TSMTrapNum };
  413.  
  414. pascal OSErr GetFrontServiceWindow(WindowPtr *window )
  415. = { 0x303C, kGetFrontServiceWindow, TSMTrapNum };
  416.  
  417. pascal short FindServiceWindow(Point thePoint,WindowPtr *theWindow)
  418. = { 0x303C, kFindServiceWindow, TSMTrapNum };
  419.  
  420.  
  421.  
  422. /* ••    Low level routines which are dispatched directly to the Component Manager ... */
  423.  
  424. #define    kCMGetScriptLangSupport        0x0001        // Component Manager call selector 1
  425. #define    kCMInitiateTextService        0x0002        // Component Manager call selector 2
  426. #define    kCMTerminateTextService        0x0003        // Component Manager call selector 3
  427. #define    kCMActivateTextService        0x0004        // Component Manager call selector 4
  428. #define    kCMDeactivateTextService    0x0005        // Component Manager call selector 5
  429. #define    kCMTextServiceEvent            0x0006        // Component Manager call selector 6
  430. #define    kCMGetTextServiceMenu        0x0007        // Component Manager call selector 7
  431. #define    kCMTextServiceMenuSelect    0x0008        // Component Manager call selector 8
  432. #define    kCMFixTextService                0x0009        // Component Manager call selector 9
  433. #define    kCMSetTextServiceCursor        0x000A        // Component Manager call selector 10
  434. #define    kCMHidePaletteWindows        0x000B        // Component Manager call selector 11            <#37>
  435.  
  436.  
  437. /* ••  Low level TSM routines ... */
  438.  
  439. pascal ComponentResult GetScriptLanguageSupport(ComponentInstance ts, ScriptLanguageSupportHandle *scriptHdl)
  440.  = {0x2F3C,0x04,kCMGetScriptLangSupport,0x7000,0xA82A};            /* selector = 1 */
  441.  
  442.  
  443. pascal ComponentResult InitiateTextService(ComponentInstance ts)
  444.  = {0x2F3C,0x00,kCMInitiateTextService,0x7000,0xA82A};            /* selector = 2 */
  445.  
  446.  
  447. pascal ComponentResult TerminateTextService(ComponentInstance ts)
  448.  = {0x2F3C,0x00,kCMTerminateTextService,0x7000,0xA82A};            /* selector = 3 */
  449.  
  450.  
  451. pascal ComponentResult ActivateTextService(ComponentInstance ts)
  452.  = {0x2F3C,0x00,kCMActivateTextService,0x7000,0xA82A};            /* selector = 4 */
  453.  
  454.  
  455. pascal ComponentResult DeactivateTextService(ComponentInstance ts)
  456.  = {0x2F3C,0x00,kCMDeactivateTextService,0x7000,0xA82A};            /* selector = 5 */
  457.  
  458.  
  459. pascal ComponentResult TextServiceEvent(ComponentInstance ts, short numOfEvents, EventRecord *event)
  460.  = {0x2F3C,0x06,kCMTextServiceEvent,0x7000,0xA82A};                /* selector = 6 */
  461.  
  462.  
  463. pascal ComponentResult GetTextServiceMenu(ComponentInstance ts, MenuHandle *serviceMenu)
  464.  = {0x2F3C,0x4,kCMGetTextServiceMenu,0x7000,0xA82A};                /* selector = 7 */
  465.  
  466.  
  467. pascal ComponentResult TextServiceMenuSelect(ComponentInstance ts, MenuHandle serviceMenu, short item)
  468.  = {0x2F3C,0x06,kCMTextServiceMenuSelect,0x7000,0xA82A};            /* selector = 8 */
  469.  
  470.  
  471. pascal ComponentResult FixTextService(ComponentInstance ts)
  472.  = {0x2F3C,0x00,kCMFixTextService,0x7000,0xA82A};                    /* selector = 9 */
  473.  
  474.  
  475. pascal ComponentResult SetTextServiceCursor(ComponentInstance ts, Point mousePos)
  476.  = {0x2F3C,0x04,kCMSetTextServiceCursor,0x7000,0xA82A};            /* selector = 10 */
  477.  
  478.  
  479. pascal ComponentResult HidePaletteWindows(ComponentInstance ts)
  480.  = {0x2F3C,0x00,kCMHidePaletteWindows,0x7000,0xA82A};                /* selector = 11                    <#37> */
  481.  
  482.  
  483.  
  484. #endif
  485.